package common

import (
	"chazhou/app/user/srv/config"
	"chazhou/pkg"
	"chazhou/pkg/logger"
	"github.com/duanshanghanqing/godash"
	"github.com/go-redsync/redsync/v4"
	"github.com/redis/go-redis/v9"
	"github.com/sony/sonyflake"
	"go.opentelemetry.io/otel/sdk/trace"
	"gorm.io/gorm"
	"log"
)

var Config *config.Config

var sf *sonyflake.Sonyflake

var GetId = func() uint64 {
	return pkg.GetId(sf)
}

var DB *gorm.DB

var RedisClient *redis.Client

var Redsync *redsync.Redsync

var Rocketmq *pkg.Rocketmq

// 可以自己创建注册中心，实现框架内的服务 注册/注销 接口
//var Register *pkg.Register

var TracerProvider *trace.TracerProvider

func init() {
	rootPath, err := godash.GetRootPath("srv")
	if err != nil {
		log.Fatalf("获取rootPath失败, %v", err)
		return
	}

	env, err := pkg.GetEnvConfig(rootPath, &Config)
	if err != nil {
		log.Fatalf("初始化配置失败, %v", err)
		return
	}
	Config.App.Env = env
	if Config.App.Port == 0 {
		port, err := godash.GetFreePort()
		if err != nil {
			return
		}
		Config.App.Port = port
	}

	if Config.App.Env == "dev" {
		logger.NewDebugLevel(&Config.Log)
	} else {
		logger.NewInfoLevel(&Config.Log)
	}

	sf, err = pkg.SnowflakeInit()
	if err != nil {
		log.Fatalf("初始化雪花算法失败, %v", err)
		return
	}

	DB, err = pkg.MysqlInit(Config.Mysql)
	if err != nil {
		log.Fatalf("初始化mysql失败, %v", err)
		return
	}

	RedisClient, err = pkg.RedisInit(Config.Redis)
	if err != nil {
		log.Fatalf("初始化redis失败, %v", err)
		return
	}

	Redsync, err = pkg.RedsyncInit(RedisClient)
	if err != nil {
		log.Fatalf("初始化redsync失败, %v", err)
		return
	}

	Rocketmq, err = pkg.RocketmqInit(Config.Rocketmq)
	if err != nil {
		log.Fatalf("初始化redsync失败, %v", err)
		return
	}

	//Register, err = pkg.NewRegister(Config.Consul)
	//if err != nil {
	//	log.Fatalf("初始化consul失败, %v", err)
	//	return
	//}

	TracerProvider, err = pkg.NewTracerProvider(Config.Telemetry)
	if err != nil {
		log.Fatalf("初始化redsync失败, %v", err)
		return
	}
}
